package model.collisions;

/**
 * La clase Collision Dictionary Key.
 * Esta clase trabaja en conjunto con Collision Dictionary y provee el objeto que funciona como la clave cada entrada del HashMap.
 * Asocia un par de categorias de colision. El elemento que colisiona, y el elemento contra el que se colisiono, en ese orden 
 */
class CollisionDictionaryKey extends Object{
	
	/** Categoria del elemento que colisiona. */
	CollisionCategory	m_collisionerCategory;
	
	/** Categoria del elemento que es colisionado. */
	CollisionCategory 	m_collisioneeCategory;
	
	/**
	 * Genera una nueva key a partir del par de categorias de colision.
	 *
	 * @param collisionerCategory Categoria del elemento que colisiona
	 * @param collisioneeCategory Categoria del elemento que es colisionado
	 */
	public CollisionDictionaryKey(
			CollisionCategory	collisionerCategory, 
			CollisionCategory 	collisioneeCategory
	) {
		m_collisionerCategory = collisionerCategory;
		m_collisioneeCategory = collisioneeCategory;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime
				* result
				+ ((m_collisioneeCategory == null) ? 0 : m_collisioneeCategory.hashCode());
		result = prime
				* result
				+ ((m_collisionerCategory == null) ? 0 : m_collisionerCategory.hashCode());
		return result;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		CollisionDictionaryKey other = (CollisionDictionaryKey) obj;
		if (m_collisioneeCategory != other.m_collisioneeCategory)
			return false;
		if (m_collisionerCategory != other.m_collisionerCategory)
			return false;
		return true;
	}

}